package info.qingshui.browser.hk;



import info.qingshui.browser.hk.proxy.ProxySettings2;


import info.qingshui.browser.hk.setting.Setting;

import info.qingshui.browser.hk.setting.VHostInfo;
import info.qingshui.browser.BaseActivity;
import info.qingshui.browser.R;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.net.http.SslError;

import android.util.Log;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class HKWebViewClient extends WebViewClient {
	HKActivity hkActivity;
	
	boolean loadingPage = false;
	String curl ;
	boolean retried = false;
	
	
	public HKWebViewClient(HKActivity hkActivity) {
		super();
		this.hkActivity = hkActivity;
	}
	
	/**
	 * 这个函数我们可以做很多操作，比如我们读取到某些特殊的URL，于是就可以不打开地址，取消这个操作，进行预先定义的其他操作，这对一个程序是非常必要的。
	 */
	@SuppressWarnings("finally")
	public boolean shouldOverrideUrlLoading(WebView webView, String url) {
		try {
			curl = url;
			Log.d(HKWebViewClient.class.getSimpleName(),"begin load url:" + url);
			//webView.clearDisappearingChildren();
			if( url.startsWith("rtsp://")) {
				Uri uri = Uri.parse(url);
	            Intent intent = new Intent(Intent.ACTION_VIEW);
	            intent.setData(uri);
	            hkActivity.startActivity(intent);
	            return false;
			}
			
			//开始加载页面，停止图片加载
			hkActivity.getWebview().getSettings().setBlockNetworkImage( true );  
			//Log.d(HKWebViewClient.class.getSimpleName(), "shouldOverrideUrlLoading url " +  url + " base url:" + webView.getUrl() );
			//拦截部分本地处理逻辑
	//		if( url.startsWith("template://") ) {
	//			Log.d(HKWebViewClient.class.getSimpleName(), "shouldOverrideUrlLoading  " +  url.substring("template://".length()));
	//			
	//			IndexManager.getIndexManager(webView.getContext()).loadIndex(webView, url.substring("template://".length()));
	//			return true;
	//		} else if ( url.startsWith("about:blank" )) {
	//			IndexManager.getIndexManager(webView.getContext()).loadIndex(webView);
	//		}
			
			Setting setting = hkActivity.getSetting();
			//统计,增加一次点击
			//setting.updateURLClick( url);
			
			//代理设置
			if ( setting.isUseProxy() ) {
				String fullHost =Uri.parse(url).getHost();
				
				VHostInfo vHostInfo = setting. getVhostsByHost( fullHost);
				
				
				if ( vHostInfo != null ) {
					
					vHostInfo.loadWebview(webView, setting, url);
				}  else {
					ProxySettings2.resetProxy( webView.getContext() );
					webView.loadUrl( url );
				}
			}
			Log.d(HKWebViewClient.class.getSimpleName(),"shouldOverrideUrlLoadingv load url:" + url);
		} catch( Throwable t) {
			Log.e(HKWebViewClient.class.getSimpleName(),"shouldOverrideUrlLoading load url:" + url,t);
		}
		return false;
		
		
        
        
    }
	
    public void onLoadResource(WebView webView, String url) {

		//Log.d(HKWebViewClient.class.getSimpleName(),"onLoadResource load url:" + url);
    }
	
	/**
	 * 
	 */
	public void onPageStarted(WebView view, String url, Bitmap favicon) {
		loadingPage = true;
		//Log.d(HKWebViewClient.class.getSimpleName(),"onPageStarted url = " + url);
		hkActivity.setOtherProgress(hkActivity.getOtherProgress() + 3);
		hkActivity.updateProgress();
		super.onPageStarted( view,  url,  favicon);
	} 
	
	/**
	 * 
	 */
	public void onPageFinished(WebView view, String url){
		super.onPageFinished( view,  url);
		//hkActivity.setTitle( view.getTitle() );
		loadingPage = false;
		//页面加载结束，继续加载图片
		hkActivity.getWebview().getSettings().setBlockNetworkImage( false );  
		

		
		//进度条更新
		if( hkActivity.getCurrentProgress() == 0 ) {
			//没有在加载页面
			return;
		}
		hkActivity.setOtherProgress(hkActivity.getOtherProgress() + 100);
		hkActivity.updateProgress();
		
		Setting setting = hkActivity.getSetting();
		
		if ( ! setting.isStartToday() ) {
			Log.d(BaseActivity.class.getSimpleName(), "onStart：已经运行超过一天时间,执行相关更新配置的操作");
			//不是今天才运行，是今天之前运行的，可以看成是今天开始运行，需要执行首次运行的操作
			setting.setStartTimeNow();//最后一次启动为当前
			setting.saveSettingIfNeeded();
			
			new StartupAsyncTask().execute( hkActivity.getBrowserApplication() );
		} else {
			if( !setting.isNetworkOK() ) {
				setting.setNetworkOK( true);
				new StartupAsyncTask().execute( hkActivity.getBrowserApplication() );
			}
		}
		
		
		
//		//统计
//		this.hkActivity.getBrowserApplication().getTracker().trackEvent(
//	            "ViewPage",  // Category
//	            "Success",  // Action
//	            url, // Label
//	            1);       // Value
//		
		
	}
	
    public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {
    	//ProxyManager.getProxyManager( view.getContext() ).proxyFail( Uri.parse(failingUrl).getHost() );
    	//-6 代理服务器不可用,服务器不存在,-1域名解析失败，-2域名解析成功，但GWF
    	//
    	
    	Log.w(HKWebViewClient.class.getSimpleName(), "onReceivedError " + errorCode + " desc=" + description + " failingurl=" + failingUrl + " curl=" + curl );

//    	Setting setting = this.hkActivity.getSetting();
//    	String host;
//		host = Uri.parse(failingUrl).getHost();
//		if( !retried ) {
//			retried = true;
//			VHostInfo vHostInfo = setting. getVhostsByHost( host );
//			if ( vHostInfo != null ) {
//				vHostInfo.loadWebview(view, setting, failingUrl);
//			}
//		} else {
//			retried = false;
//		}
    	
    	//统计
//		this.hkActivity.getBrowserApplication().getTracker().trackEvent(
//	            "ViewPage",  // Category
//	            "fail(" + errorCode+ ")",  // Action
//	            failingUrl, // Label
//	            1);       // Value
	          
    	//    	if( !failingUrl.startsWith("file:///") && loadingPage && failingUrl.equals(curl) ) {
//    		loadingPage = false;
//    		view.stopLoading();
//    		view.loadUrl( Setting.ERROR_PAGE );
//    	}
    }
	
//	1，接收到Http请求的事件
//	onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) 
//
//	2，打开链接前的事件
//	public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } 
//
//	这个函数我们可以做很多操作，比如我们读取到某些特殊的URL，于是就可以不打开地址，取消这个操作，进行预先定义的其他操作，这对一个程序是非常必要的。
//	 
//	3，载入页面完成的事件
//	public void onPageFinished(WebView view, String url){ } 
//
//	同样道理，我们知道一个页面载入完成，于是我们可以关闭loading条，切换程序动作。
//	 
//	4，载入页面开始的事件
//	public void onPageStarted(WebView view, String url, Bitmap favicon) { } 
//
//	这个事件就是开始载入页面调用的，通常我们可以在这设定一个loading的页面，告诉用户程序在等待网络响应。

//    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){   
//    	//handler.cancel(); 默认的处理方式，WebView变成空白页   
//    	handler.proceed();//接受证书
//    	//handler.p
//    	//Log.w(HKWebViewClient.class.getSimpleName(), "onReceivedSslError:"+ error.toString());
//    	//handleMessage(Message msg); 其他处理   
//    	  
//    }   

   
//	public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
//        //handler.cancel(); // Android默认的处理方式
//        handler.proceed();  // 接受所有网站的证书
//        //handleMessage(Message msg); // 进行其他处理
//        
//
//    }
}

